home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Special 23 / AMIGAplus Sonderheft 23 (2000)(Falke)(DE)[!].iso / Rexx / VectorText.pprx < prev    next >
Text File  |  1999-11-06  |  7KB  |  269 lines

  1. /* Personal Paint Amiga Rexx script - Copyright © 1996, 1997 Cloanto Italia srl */
  2.  
  3. /* $VER: VectorText.pprx 1.1 */
  4.  
  5. /** ENG
  6.  This script renders a vector text in the current environment.
  7.  A requester allows the user to select several parameters, such as
  8.  font, text string, angle, shear angle, bold level, antialiasing, etc.
  9.  The text is drawn using the current foreground color.
  10. */
  11.  
  12. /** DEU
  13.  Mit diesem Skript läßt sich ein Vektortext in der aktuellen
  14.  Umgebung erzeugen. Das dazugehörige Dialogfenster enthält
  15.  Einstellmöglichkeiten für verschiedene Parameter, wie Font,
  16.  Textstring, Winkel, Neigungsgrad, Stärke, Kantenglättung,
  17.  usw. Die Textdarstellung erfolgt in der aktuellen Vordergrundfarbe.
  18. */
  19.  
  20. /** ITA
  21.  Questo script compone un testo vettoriale nell'ambiente corrente.
  22.  Una finestra di dialogo permette di selezionare diversi parametri, come
  23.  font, stringa di testo, angolo, inclinazione, spessore, smorzamento
  24.  seghettature (antialiasing), ecc. Il testo viene scritto utilizzando
  25.  l'attuale colore di primo piano.
  26. */
  27.  
  28. IF ARG(1, EXISTS) THEN
  29.     PARSE ARG PPPORT x0 y0 rwidth rheight .
  30. ELSE
  31.     EXIT 0  /* macro execution only */
  32.  
  33. ADDRESS VALUE PPPORT
  34. OPTIONS RESULTS
  35. OPTIONS FAILAT 10000
  36.  
  37.  
  38. Get 'LANG'
  39. IF RESULT = 1 THEN DO        /* Deutsch */
  40.     txt_title_req     = "Texteinstellungen"
  41.     txt_gad_font      = "_Font:"
  42.     txt_gad_text      = "_Text:"
  43.     txt_string_text   = "Text"
  44.     txt_gad_angle     = "Wink_el:"
  45.     txt_gad_shear     = "_Neigung:"
  46.     txt_gad_boldx     = "Stärke _X:"
  47.     txt_gad_boldy     = "Stärke _Y:"
  48.     txt_gad_aalias    = "_Kantenglättung:"
  49.     txt_gad_aalias0   = "Keine"
  50.     txt_gad_aalias1   = "Schwach"
  51.     txt_gad_aalias2   = "Mittel"
  52.     txt_gad_aalias3   = "Stark"
  53.     txt_gad_kratio    = "_Verhältnis erhalten:"
  54.     txt_gad_kbline    = "_Grundlinie erhalten:"
  55.     txt_err_oldclient = "Für dieses Skript_ist eine neuere Version_von Personal Paint erforderlich"
  56.     txt_err_nofonts   = "Vektorfonts nicht auffindbar"
  57.     txt_err_vtext     = "VektorText-Fehler: "
  58. END
  59. ELSE IF RESULT = 2 THEN DO    /* Italiano */
  60.     txt_title_req     = "Parametri testo"
  61.     txt_gad_font      = "_Font:"
  62.     txt_gad_text      = "_Testo:"
  63.     txt_string_text   = "Testo"
  64.     txt_gad_angle     = "Ang_olo:"
  65.     txt_gad_shear     = "In_clinazione:"
  66.     txt_gad_boldx     = "Grassetto _X:"
  67.     txt_gad_boldy     = "Grassetto _Y:"
  68.     txt_gad_aalias    = "Antialia_s:"
  69.     txt_gad_aalias0   = "Nessuno"
  70.     txt_gad_aalias1   = "Basso"
  71.     txt_gad_aalias2   = "Medio"
  72.     txt_gad_aalias3   = "Alto"
  73.     txt_gad_kratio    = "Asp_etto:"
  74.     txt_gad_kbline    = "Linea di _base:"
  75.     txt_err_oldclient = "Questa procedura richiede_una versione più recente_di Personal Paint"
  76.     txt_err_nofonts   = "Non vi sono font vettoriali"
  77.     txt_err_vtext     = "Errore comando VectorText: "
  78. END
  79. ELSE DO                /* English */
  80.     txt_title_req     = "Text Settings"
  81.     txt_gad_font      = "_Font:"
  82.     txt_gad_text      = "_Text:"
  83.     txt_string_text   = "Text"
  84.     txt_gad_angle     = "_Angle:"
  85.     txt_gad_shear     = "_Shear:"
  86.     txt_gad_boldx     = "Bold _X:"
  87.     txt_gad_boldy     = "Bold _Y:"
  88.     txt_gad_aalias    = "A_ntialias:"
  89.     txt_gad_aalias0   = "None"
  90.     txt_gad_aalias1   = "Low"
  91.     txt_gad_aalias2   = "Medium"
  92.     txt_gad_aalias3   = "High"
  93.     txt_gad_kratio    = "Keep _Ratio:"
  94.     txt_gad_kbline    = "Keep _Baseline:"
  95.     txt_err_oldclient = "This script requires a newer_version of Personal Paint"
  96.     txt_err_nofonts   = "Vector fonts not found"
  97.     txt_err_vtext     = "VectorText error: "
  98. END
  99.  
  100. Version 'REXX'
  101. IF RESULT < 7 THEN DO
  102.     RequestNotify 'PROMPT "'txt_err_oldclient'"'
  103.     EXIT 10
  104. END
  105.  
  106.  
  107. def_font_path = "FONTS:"
  108. max_text_size = 8000
  109.  
  110. font_path = LoadSet('PP_VectorPath', def_font_path, 1, 0)
  111.  
  112.  
  113. ftot = 0
  114. vftfname = 'ENV:PP_VectorFonts'
  115. IF ~OPEN(fexists, vftfname) THEN DO
  116.     ADDRESS COMMAND 'List >'vftfname' 'font_path' PAT=#?.otag NOHEAD LFORMAT="%s"'
  117.     ADDRESS COMMAND 'Sort 'vftfname vftfname'.s'
  118.     IF RC = 0 THEN DO
  119.         ADDRESS COMMAND 'Delete >NIL: 'vftfname
  120.         ADDRESS COMMAND 'Copy >NIL: 'vftfname'.s' vftfname
  121.         ADDRESS COMMAND 'Delete >NIL: 'vftfname'.s'
  122.     END
  123. END
  124. ELSE CALL CLOSE(fexists)
  125.  
  126. IF OPEN('listfile', vftfname) THEN DO
  127.     DO FOREVER
  128.         fline = READLN('listfile')
  129.         IF EOF('listfile') THEN BREAK
  130.         ftot = ftot + 1
  131.         fontname.ftot = LEFT(fline, LENGTH(fline) - 5)
  132.     END
  133.     CALL CLOSE('listfile')
  134. END
  135.  
  136. IF ftot = 0 THEN DO
  137.     RequestNotify 'PROMPT "'txt_err_nofonts'"'
  138.     EXIT 10
  139. END
  140.  
  141.  
  142. fntnum = LoadSet('Font', 0)
  143. text   = LoadSet('Text', txt_string_text)
  144. angle  = LoadSet('Angle', 0)
  145. shear  = LoadSet('Shear', 0)
  146. boldx  = LoadSet('BoldX', 0)
  147. boldy  = LoadSet('BoldY', 0)
  148. aalias = LoadSet('Antialias', 0)
  149. kratio = LoadSet('KeepRatio', 0)
  150. kbline = LoadSet('KeepBaseline', 0)
  151.  
  152. req = '"LIST = ""'txt_gad_font'"", 'ftot', 'fntnum', 20, 5'
  153. DO f = 1 TO ftot
  154.     req = req || ', ""' || fontname.f || '""'
  155. END
  156. req = req ||,
  157.      ' VSPACE = 2 ' ||,
  158.       'STRING = ""'txt_gad_text'"", 'max_text_size', ""'text'"" ' ||,
  159.       'VSPACE = 2 ' ||,
  160.       'SLIDE = ""'txt_gad_angle'"", -360, 360, 'angle' ' ||,
  161.       'SLIDE = ""'txt_gad_shear'"", -45, 45, 'shear' ' ||,
  162.       'SLIDE = ""'txt_gad_boldx'"", -8, 8, 'boldx' ' ||,
  163.       'SLIDE = ""'txt_gad_boldy'"", -8, 8, 'boldy' ' ||,
  164.       'VSPACE = 2 ' ||,
  165.         'CYCLE = ""'txt_gad_aalias'"", 4, 'aalias', ""'txt_gad_aalias0'"", ""'txt_gad_aalias1'"", ""'txt_gad_aalias2'"", ""'txt_gad_aalias3'"" ' ||,
  166.       'CHECK = ""'txt_gad_kratio'"", 'kratio' ' ||,
  167.       'CHECK = ""'txt_gad_kbline'"", 'kbline' ' ||,
  168.       'VSPACE = 2 "'
  169.  
  170. LockGUI
  171. Request 'RESIZE COMPACT "'txt_title_req'" 'req
  172. IF RC = 0 THEN DO
  173.     fntnum = RESULT.1 + 1
  174.     text   = RESULT.2
  175.     angle  = RESULT.3
  176.     shear  = RESULT.4
  177.     boldx  = RESULT.5
  178.     boldy  = RESULT.6
  179.     aalias = RESULT.7
  180.     kratio = RESULT.8
  181.     kbline = RESULT.9
  182.  
  183.     CALL SaveSet('Font', fntnum - 1)        /* setting persistence */
  184.     CALL SaveSet('Text', text)
  185.     CALL SaveSet('Angle', angle)
  186.     CALL SaveSet('Shear', shear)
  187.     CALL SaveSet('BoldX', boldx)
  188.     CALL SaveSet('BoldY', boldy)
  189.     CALL SaveSet('Antialias', aalias)
  190.     CALL SaveSet('KeepRatio', kratio)
  191.     CALL SaveSet('KeepBaseline', kbline)
  192.  
  193.     options = 'DYNAMIC'
  194.     IF kratio THEN
  195.         options = options 'KEEPRATIO'
  196.     IF kbline THEN
  197.         options = options 'KEEPBASELINE'
  198.  
  199.     /* encode quotes */
  200.     pos = 1
  201.     DO FOREVER
  202.         pos = INDEX(text, '"', pos)
  203.         IF pos = 0 THEN
  204.             BREAK
  205.         text = INSERT('"', text, pos)
  206.         pos = pos + 2
  207.     END
  208.  
  209.     VectorText 'TEXT "'text'" FONTPATH "'font_path'" FONTNAME "'fontname.fntnum'" X0 'x0' Y0 'y0' X1 'x0 + rwidth - 1' Y1 'y0 + rheight - 1' ANGLE 'angle * 1000' SHEAR 'shear * 1000' BOLDX 'boldx * 1000' BOLDY 'boldy * 1000' ANTIALIAS 'aalias options
  210.     IF RC > 5 THEN
  211.         RequestNotify 'PROMPT "'txt_err_vtext || RC'"'
  212. END
  213. UnlockGUI
  214.  
  215. EXIT 0
  216.  
  217.  
  218.  
  219.  
  220. SaveSet:
  221.     sname = ARG(1)
  222.     val = ARG(2)
  223.  
  224.     IF OPEN('settingfile', 'ENV:PP_VectorText_'sname, 'W') THEN DO
  225.         CALL WRITECH('settingfile', val)
  226.         CALL CLOSE('settingfile')
  227.     END
  228.  
  229.     RETURN
  230.  
  231.  
  232.  
  233.  
  234. LoadSet:
  235.     sname = ARG(1)
  236.     def_val = ARG(2)
  237.     IF ARG() > 2 THEN
  238.         global_set = ARG(3)
  239.     ELSE
  240.         global_set = 0
  241.     IF ARG() > 3 THEN
  242.         request_quote = ARG(4)
  243.     ELSE
  244.         request_quote = 1
  245.  
  246.     val = def_val
  247.     IF global_set THEN
  248.         set_fname = 'ENV:'sname
  249.     ELSE
  250.         set_fname = 'ENV:PP_VectorText_'sname
  251.  
  252.     IF OPEN('settingfile', set_fname, 'R') THEN DO
  253.         val = READCH('settingfile', 65535)
  254.         CALL CLOSE('settingfile')
  255.     END
  256.  
  257.     IF request_quote THEN DO
  258.         /* encode quotes for the Request command ('"' -> '\""') */
  259.         qpos_start = 1
  260.         DO FOREVER
  261.             qpos = INDEX(val, '"', qpos_start)
  262.             IF qpos = 0 THEN BREAK
  263.             val = INSERT('\"', val, qpos-1)
  264.             qpos_start = qpos + 3
  265.         END
  266.     END
  267.  
  268.     RETURN val
  269.